// Object.defineProperty(obj,"参数名",{配置对象})第二种用法
//  配置对象可以使用set()方法get()方法来定义设置、获取值的方法。
//  setter和getter，这种方式可以称之为属性拦截，vue2的原理就是采用的属性拦截

/**
 * 细节：
 *   1.定义了set()和get()之后，不能定义value,writable两个属性
 */

// 操作对象的属性值，就可以改变DOM的内容

let obj = {
    name: "Hydra"
}

Object.defineProperty(obj,"text",{
    // 对obj的text属性赋值时会调用该方法
    set(value) {
        console.log("设置值")
        text = value;
    },
    // 对obj的text取值时会调用该方法
    get() {
        console.log("获取值")
        // 这里如果没有设置text值，直接获取会出异常，所以捕获处理
        try {
            return text;        
        } catch (e) {
            // console.error(e);
            return undefined;
        }
    },
    // writable: false
    configurable: true,
    enumerable: true
})

obj.text = "我";
console.log("obj.text = ",obj.text);